import { request } from '@/utils/request/axios';
import { ErrorMessageMode, PageRequest, PageData } from '#/request';
import {
  AppInputDto,
  AppInputDtoSimple,
  AppOutputDto,
  AppOutputDtoSimple,
} from '@/api/mobile/model/app';

/** 移动端应用管理URL枚举 */
enum Api {
  /** 读取移动端应用 */
  Read = '/api/mobile/admin/app/read',
  /** 读取移动端应用简单信息 */
  ReadSimple = '/api/mobile/admin/app/readSimple',

  /** 获取移动端应用 */
  Get = '/api/mobile/admin/app/get',

  /** 新增移动端应用 */
  Create = '/api/mobile/admin/app/create',
  /** 更新移动端应用 */
  Update = '/api/mobile/admin/app/update',
  /** 更新移动端应用简单信息 */
  UpdateSimple = '/api/mobile/admin/app/updateSimple',
  /** 删除移动端应用 */
  Delete = '/api/mobile/admin/app/delete',
}

//#region 读取移动端应用
/**
 * 读取移动端应用
 * @param params 分页请求
 * @param mode 错误消息模型
 */
export function readApp(params: PageRequest, mode: ErrorMessageMode = 'message') {
  return request.post<PageData<AppOutputDto>>(
    {
      url: Api.Read,
      params: params,
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion
//#region 读取移动端应用简单信息
/**
 * 读取移动端应用简单信息
 * @param params 分页请求
 * @param mode 错误消息模型
 */
export function readAppSimple(params: PageRequest, mode: ErrorMessageMode = 'message') {
  return request.post<PageData<AppOutputDtoSimple>>(
    {
      url: Api.ReadSimple,
      params: params,
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion

//#region 获取移动端应用
/**
 * 获取移动端应用
 * @param id 移动端应用编号
 * @param mode 错误消息模型
 */
export function getApp(id: string | bigint, mode: ErrorMessageMode = 'message') {
  return request.get<AppOutputDto>(
    {
      url: Api.Get,
      params: { id: id },
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion

//#region 新增移动端应用
/**
 * 新增移动端应用
 * @param dtos 输入DTO
 * @param mode 错误消息模型
 */
export function createApp(dtos: AppInputDto[], mode: ErrorMessageMode = 'message') {
  return request.post(
    {
      url: Api.Create,
      params: dtos,
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion
//#region 更新移动端应用
/**
 * 更新移动端应用
 * @param dtos 输入DTO
 * @param mode 错误消息模型
 */
export function updateApp(dtos: AppInputDto[], mode: ErrorMessageMode = 'message') {
  return request.post(
    {
      url: Api.Update,
      params: dtos,
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion
//#region 更新移动端应用简单信息
/**
 * 更新移动端应用简单信息
 * @param dtos 输入DTO
 * @param mode 错误消息模型
 */
export function updateAppSimple(dtos: AppInputDtoSimple[], mode: ErrorMessageMode = 'message') {
  return request.post(
    {
      url: Api.UpdateSimple,
      params: dtos,
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion
//#region 删除移动端应用
/**
 * 删除移动端应用
 * @param ids 移动端应用编号
 * @param mode 错误消息模型
 */
export function deleteApp(ids: (string | bigint)[], mode: ErrorMessageMode = 'message') {
  return request.post(
    {
      url: Api.Delete,
      params: ids,
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion
